package cn.saltice.idempotence.idem.warpper;

import cn.saltice.idempotence.idem.exception.IdempotentException;

import java.util.function.Supplier;

/**
 * @program: idempotence
 * @description: Supplier包装
 * @author: Mr.Liu
 * @create: 2020-10-06 21:12
 **/
public interface IdempotentSupplier<T> extends Supplier<T> {
    /**
     * 具体需要被调用的
     * @param key 幂等键
     * @param ex 异常
     * @return
     */
    default T get(String key, IdempotentException ex){
        return runTask(key,ex);
    }

    /**
     * 任务体
     * @param key 幂等键
     * @param ex 异常
     * @return
     */
    public abstract T runTask(String key, IdempotentException ex);
    /**
     * 实现父类的
     * 不用的方法
     * @return
     */
    @Override
    @Deprecated
    default T get() {
        return null;
    }
}
